import logging
from typing import Callable, List

from langchain_huggingface import HuggingFaceEmbeddings

from utils.embedding_config import EmbeddingConfig, EmbeddingProvider

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


class EmbeddingFactory:
    """
    嵌入工厂类，用于根据配置创建不同提供商的嵌入函数
    """

    @staticmethod
    def create_embedding_function(
        config: EmbeddingConfig,
    ) -> Callable[[str], List[float]]:
        """
        根据配置创建嵌入函数

        Args:
            config: 嵌入配置对象

        Returns:
            嵌入函数，接受文本并返回嵌入向量
        """
        if config.provider == EmbeddingProvider.HUGGINGFACE:
            # 使用本地模型路径
            return HuggingFaceEmbeddings(
                model_name=config.model_name, model_kwargs={"device": "cpu"}
            )
        else:
            raise ValueError(f"不支持的嵌入提供商: {config.provider}")
